home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / http_login.nasl < prev    next >
Text File  |  2005-03-31  |  4KB  |  145 lines

  1. #
  2. # Copyright 2002 by Michel Arboi <arboi@alussinan.org>
  3. #
  4. # GNU Public Licence
  5. #
  6.  
  7. if(description)
  8. {
  9.  script_id(11149);
  10.  script_version ("$Revision: 1.8 $");
  11.  
  12.  name["english"] = "HTTP login page";
  13.  name["francais"] = "Page de connexion HTTP";
  14.  script_name(english:name["english"], francais:name["francais"]);
  15.  
  16.  desc["english"] = "
  17. This script logs onto a web server through a login page and
  18. stores the authentication / session cookie.
  19.  
  20. Risk factor : None";
  21.  
  22.  desc["francais"] = "
  23. Ce script se connecte sur un serveur web α travers une page
  24. d'accueil et enregistre le cookie d'authentification ou de session.
  25.  
  26. Risque : Aucun";
  27.  
  28.  script_description(english:desc["english"], francais:desc["francais"]);
  29.  
  30.  summary["english"] = "Log through HTTP page";
  31.  summary["francais"] = "Connexion via une page HTTP";
  32.  script_summary(english:summary["english"], francais:summary["francais"]);
  33.  
  34.  script_category(ACT_GATHER_INFO);    # Has to run after find_service
  35.  
  36.  script_copyright(english:"This script is Copyright (C) 2002 Michel Arboi");
  37.  family["english"] = "Settings";
  38.  script_family(english:family["english"]);
  39.  
  40.  # We first visit this page to get a cookie, just in case
  41.  script_add_preference(name:"Login page :", type: "entry", value: "/");
  42.  # Then we submit the username & password to the right form
  43.  script_add_preference(name:"Login form :", type: "entry", value: "");
  44.  # Here, we allow some kind of variable substitution. 
  45.  script_add_preference(name:"Login form fields :", type: "entry", 
  46.     value:"user=%USER%&pass=%PASS%");
  47.  script_dependencie("find_service.nes", "httpver.nasl", "logins.nasl");
  48.  script_require_ports("Services/www", 80);
  49.  exit(0);
  50. }
  51.  
  52. include("http_func.inc");
  53.  
  54. # The script code starts here
  55.  
  56. http_login = get_kb_item("http/login");
  57. http_pass = get_kb_item("http/password");
  58. http_login_form = script_get_preference("Login form :");
  59. http_login_page = script_get_preference("Login page :");
  60. http_login_fields = script_get_preference("Login form fields :");
  61.  
  62. if (! http_login_form) exit(0);
  63. if (! http_login_fields) exit(0);
  64.  
  65. if (http_login)
  66. {
  67.   http_login_fields = ereg_replace(string: http_login_fields,
  68.     pattern: "%USER%", replace: http_login);
  69. }
  70. if (http_pass)
  71. {
  72.   http_login_fields = ereg_replace(string: http_login_fields,
  73.     pattern: "%PASS%", replace: http_pass);
  74. }
  75.  
  76. port = get_http_port(default:80);
  77.  
  78. if(! get_port_state(port)) exit(0);
  79.  
  80. soc = http_open_socket(port);
  81. if (! soc) exit(0);
  82.  
  83. cookie1="";
  84. referer="";
  85. if (http_login_page)
  86. {
  87.   req = http_get(port: port, item: http_login_page);
  88.   send(socket: soc, data: req);
  89.   r = http_recv_headers(soc);
  90.   #r2 = recv(socket: soc, length: 1024);
  91.   close(soc);
  92.   soc = http_open_socket(port);
  93.   if (! soc) exit(0);
  94.   cookies = egrep(pattern: "Set-Cookie2? *:", string: r);
  95.   if (cookies)
  96.   {
  97.     cookie1 = ereg_replace(string: cookies, 
  98.         pattern: "^Set-Cookie", replace: "Cookie");
  99.     c = ereg_replace(string: cookie1, 
  100.     pattern: "^Cookie2? *: *", replace: "");
  101.     #display("First cookie = ", c);
  102.   }
  103.   trp = get_port_transport(port);
  104.   if (trp > 1) referer = "Referer: https://";
  105.   else referer = "Referer: http://";
  106.   referer = string(referer, get_host_name());
  107.   if (((trp == 1) && (port != 80)) || ((trp > 1) && (port != 443)))
  108.     referer = string(referer, ":", port);
  109.   if (ereg(pattern: "^[^/]", string: http_login_page))
  110.     referer = string(referer, "/");
  111.   referer = string(referer, http_login_page, "\r\n");
  112. }
  113.  
  114.  
  115. req = http_post(port: port, item: http_login_form, data: http_login_fields);
  116. req = ereg_replace(string: req, pattern: "Content-Length: ",
  117.     replace: string("Content-Type: application/x-www-form-urlencoded\r\n",
  118.             referer, cookie1, "Content-Length: ") );
  119. send(socket:soc, data:req);
  120. r = http_recv_headers(soc);
  121. close(soc);
  122.  
  123. # Failed - permission denied or bad gateway or whatever
  124. if (egrep(pattern: "HTTP/[019.]+ +[45][0-9][0-9]", string: r)) exit(0);
  125.  
  126. # All other codes are considered as OK. We might get a 30x code!
  127. cookies = egrep(pattern: "Set-Cookie2? *:", string: r);
  128. if (cookies)
  129. {
  130.   cookies = ereg_replace(string: cookies, 
  131.     pattern: "^Set-Cookie", replace: "Cookie");
  132.   set_kb_item(name: string("/tmp/http/auth/", port), value: cookies);
  133.   ##set_kb_item(name: "http/auth", value: cookies);
  134.   c = ereg_replace(string: cookies, 
  135.     pattern: "^Cookie2? *: *", replace: "");
  136.   #display("Authentication cookie = ", c);
  137. }
  138. else if (cookie1)
  139. {
  140.   set_kb_item(name: string("/tmp/http/auth/", port), value: cookie1);
  141.   #display("Trying to use session cookie\n");
  142. }
  143.  
  144.  
  145.